﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using Logica.Modulos.ClasesLogica;
using Modelo.Modulos.ClasesModelado;

namespace ProyectoFinal
{
    public partial class frmInfoPerfil : Form
    {
        private string accion;
        private int idPerfil;

        public int IdPerfil
        {
            get { return idPerfil; }
            set { idPerfil = value; }

        }
       
        public string Accion
        {
            get { return accion; }
            set { accion = value; }

        }
        public frmInfoPerfil()
        {
            InitializeComponent();
        }


        List<int> listaId = new List<int>();
        private void frmInfoPerfil_Load(object sender, EventArgs e)
        {
           if (accion == "Ver")
            {
                tvPermiso.ExpandAll();
                txtNombre.ReadOnly = true;
                txtDescripcion.ReadOnly = true;
                tvPermiso.Scrollable = true;
                tvPermiso.Enabled = true;
                tvPermiso.CheckBoxes = false;
                btnGuardar.Visible = false;
                cargarInfobyId();
            }
            else
           {
               if (accion == "Editar")
               {
                   cargarArbol();

                   
                   
               }
               else
               { 
                   cargarArbol();

               }
                
            }
        }

        private void btnSalir_Click(object sender, EventArgs e)
        {
            
            Close();
        }
       

        public void cargarArbol()
        {
            Perfil_PermisoLog LogicaPermiso_Perfil = new Perfil_PermisoLog();
            PerfilesMod objPerfiles = new PerfilesMod();
            objPerfiles.IdPerfil = idPerfil;
            List<PerfilesMod> ListaPermisos_Perfil = LogicaPermiso_Perfil.ConsultarPerfilesId(objPerfiles);
          
            PermisosLog Logica = new PermisosLog();
            List<PermisosMod> ListaPermisos = Logica.ConsultarPermisos();
            
            
           
            TreeNode NodoPapa = null;
            string UltimoPapa = "";
           
                for (int i = 0; i < ListaPermisos.Count; i++)
                {
                    if (UltimoPapa != ListaPermisos[i].NombreModulo)
                    {
                        NodoPapa = new TreeNode(ListaPermisos[i].NombreModulo);

                        TreeNode NodoHijo = new TreeNode(ListaPermisos[i].NombrePermiso);
                        NodoPapa.Nodes.Add(NodoHijo);
                        tvPermiso.Nodes.Add(NodoPapa);
                        UltimoPapa = ListaPermisos[i].NombreModulo;
                        NodoHijo.Tag = ListaPermisos[i].IdPremiso;
                        for (int j = 0; j < ListaPermisos_Perfil.Count; j++)
                        {
                            if (accion == "Editar")
                            {
                                txtNombre.Text = ListaPermisos_Perfil[j].NombrePerfil;
                                txtDescripcion.Text = ListaPermisos_Perfil[j].DescripcionPerfil;
                            }
                            if (ListaPermisos_Perfil[j].IdPermiso == ListaPermisos[i].IdPremiso)
                            {
                                NodoHijo.Checked = true;
                            }
                        }

                    }
                    else
                    {

                        TreeNode NodoHijo = new TreeNode((ListaPermisos[i].NombrePermiso));
                        NodoPapa.Nodes.Add(NodoHijo);
                        NodoHijo.Tag = ListaPermisos[i].IdPremiso;
                        for (int j = 0; j < ListaPermisos_Perfil.Count; j++)
                        {
                            if (ListaPermisos_Perfil[j].IdPermiso == ListaPermisos[i].IdPremiso)
                            {
                                NodoHijo.Checked = true;
                            }
                        }


                    
                }
                
            }
            tvPermiso.ExpandAll();
        }

        
        public void cargarInfobyId()
        {
            Perfil_PermisoLog LogicaPermiso_Perfil = new Perfil_PermisoLog();
            PerfilesMod objPerfiles = new PerfilesMod();
            objPerfiles.IdPerfil = idPerfil;
            List<PerfilesMod> ListaPermisos_Perfil = LogicaPermiso_Perfil.ConsultarPerfilesId(objPerfiles);

          
            TreeNode NodoPapa = null;
            string UltimoPapa = "";

            for (int i = 0; i < ListaPermisos_Perfil.Count; i++)
            {
                txtNombre.Text = ListaPermisos_Perfil[i].NombrePerfil;
                txtDescripcion.Text = ListaPermisos_Perfil[i].DescripcionPerfil;
                if (UltimoPapa != ListaPermisos_Perfil[i].NombreModulo)
                {
                    NodoPapa = new TreeNode(ListaPermisos_Perfil[i].NombreModulo);

                    TreeNode NodoHijo = new TreeNode(ListaPermisos_Perfil[i].NombrePermiso);
                    NodoPapa.Nodes.Add(NodoHijo);
                    tvPermiso.Nodes.Add(NodoPapa);
                    UltimoPapa = ListaPermisos_Perfil[i].NombreModulo;
                    NodoHijo.Tag = ListaPermisos_Perfil[i].IdPermiso;


                }
                else
                {

                    TreeNode NodoHijo = new TreeNode((ListaPermisos_Perfil[i].NombrePermiso));
                    NodoPapa.Nodes.Add(NodoHijo);
                    NodoHijo.Tag = ListaPermisos_Perfil[i].IdPermiso;

                }
            }
            tvPermiso.ExpandAll();
        }


        private void btnGuardar_Click(object sender, EventArgs e)
        {
            if (accion == "Agregar")
            {
                try
                {
                    //if (ValidacionesCampos() == true)
                    // {
                    PerfilesMod objMod = new PerfilesMod();
                    objMod.NombrePerfil = txtNombre.Text;
                    objMod.DescripcionPerfil = txtDescripcion.Text;


                    TreeNodeCollection nodes = tvPermiso.Nodes;
                    int indice;
                    List<int> listaPermisos = new List<int>();
                    foreach (TreeNode n in nodes)
                    {
                        indice = n.Index + 1;
                        RecorrerNodos(n, indice);

                    }

                    Perfil_PermisoLog Logica = new Perfil_PermisoLog();
                    Logica.InsertarPermiso_Perfil(objMod, listaId);
            




                    Close();
                    //  }



                }
                catch (Exception exc)
                {

                    MessageBox.Show(exc.Message, "Error de capa 8", MessageBoxButtons.OK, MessageBoxIcon.Error);
                }
            }
            else
            {
                if (accion == "Editar")
                {
                    try
                    {
                        PerfilesMod objMod = new PerfilesMod();
                        objMod.IdPerfil = idPerfil;
                        objMod.NombrePerfil = txtNombre.Text;
                        objMod.DescripcionPerfil = txtDescripcion.Text;

                        TreeNodeCollection nodes = tvPermiso.Nodes;
                        int indice;
                        List<int> listaPermisos = new List<int>();
                        foreach (TreeNode n in nodes)
                        {
                            indice = n.Index + 1;
                            RecorrerNodos(n, indice);

                        }

                        Perfil_PermisoLog Logica = new Perfil_PermisoLog();
                        Logica.EliminarPerfil_Permiso(objMod);
                        Logica.ActualizarPermiso_Perfil(objMod, listaId,idPerfil);

                        Close();
                    }
                    catch (Exception exc)
                    {

                        MessageBox.Show(exc.Message, "Error de capa 8", MessageBoxButtons.OK, MessageBoxIcon.Error);
                    }
                }
               
            }
           
        }

        private void RecorrerNodos(TreeNode treeNode, int indice)
        {
            //Si el nodo que recibimos tiene hijos se recorrerá
            //para luego verificar si esta o no checado
            foreach (TreeNode tn in treeNode.Nodes)
            {   //Se Verifica si esta marcado...
                if ((tn.Checked == true))
                {
                    listaId.Add(Convert.ToInt32(tn.Tag));

                }
               RecorrerNodos(tn, indice);

            }

        }
    }
}
